【MySQL】日時型(DATE / TIME / DATETIME / TIMESTAMP)

【MySQL】日時型(DATE / TIME / DATETIME / TIMESTAMP)

MySQLの日付・日時に関する型について解説します。

検証環境

日時型

MySQLは日付や日時に関する型を扱うことができます。

日時型
意味 フォーマット
DATE 日付 YYYY-MM-DD
TIME 時間 HH:MM:SS
DATETIME 日時 YYYY-MM-DD HH:MM:SS
TIMESTAMP タイムスタンプ 秒数(1970-01-01 00:00:00からの秒数)

DATE

DATEは日付の型です。

基本構文

カラム名 DATE

サンプル

mysql> CREATE TABLE sample ( date DATE );
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO sample VALUE ( '2024-01-16' );
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM sample;
+------------+
| date       |
+------------+
| 2024-01-16 |
+------------+
1 row in set (0.00 sec)

TIME

TIMEは時間を表す型です。

基本構文

カラム名 TIME

サンプル

mysql> CREATE TABLE sample ( time TIME );
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO sample VALUE ( '12:34:56' );
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM sample;
+----------+
| time     |
+----------+
| 12:34:56 |
+----------+
1 row in set (0.01 sec)

ミリ秒に対応するには型の後に(桁数)を記述します。

mysql> CREATE TABLE sample ( time TIME(3) );
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO sample VALUE ( '12:34:56' );
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO sample VALUE ( '12:34:56.789' );
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM sample;
+--------------+
| time         |
+--------------+
| 12:34:56.000 |
| 12:34:56.789 |
+--------------+
2 rows in set (0.00 sec)

DATETIME

DATETIMEは日時の型です。

基本構文

カラム名 DATETIME

サンプル

mysql> CREATE TABLE sample ( dt DATETIME );
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO sample VALUE ( '2024-01-16 12:34:56' );
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO sample VALUE ( '2024-01-16' );
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM sample;
+---------------------+
| dt                  |
+---------------------+
| 2024-01-16 12:34:56 |
| 2024-01-16 00:00:00 |
+---------------------+
2 rows in set (0.00 sec)

mysql> INSERT INTO sample VALUE ( '12:34:56' );
ERROR 1292 (22007): Incorrect datetime value: '12:34:56' for column 'dt' at row 1

日付のみの値の場合、時間は00:00:00が自動補完されます。

また、ミリ秒に対応するにはTIMEと同様に型の後に(桁数)を記述します。

mysql> CREATE TABLE sample ( dt DATETIME(3) );
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO sample VALUE ( '2024-01-16 12:34:56.789' );
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO sample VALUE ( '2024-01-16' );
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM sample;
+-------------------------+
| dt                      |
+-------------------------+
| 2024-01-16 12:34:56.789 |
| 2024-01-16 00:00:00.000 |
+-------------------------+
2 rows in set (0.00 sec)

TIMESTAMP

TIMESTAMPは1970-01-01 00:00:00からの秒数を表す型です。

値はDATEやDATETIMEと同様に記述できます。

基本構文

カラム名 TIMESTAMP

サンプル

mysql> CREATE TABLE sample ( ts TIMESTAMP );
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO sample VALUE ( '2024-01-16 12:34:56' );
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO sample VALUE ( '2024-01-16' );
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM sample;
+---------------------+
| ts                  |
+---------------------+
| 2024-01-16 12:34:56 |
| 2024-01-16 00:00:00 |
+---------------------+
2 rows in set (0.00 sec)